package com.jyw.business.ins.service;

import java.time.LocalDateTime;
import java.util.List;

import com.jyw.business.ast.domain.dto.web.InsRecordAstPageDto;
import com.jyw.business.ast.domain.dto.web.InsTaskAstPageDto;
import com.jyw.business.ast.domain.dto.wechat.WechatInsRecordAstPageDto;
import com.jyw.business.ast.domain.dto.wechat.WechatInsTaskAstPageDto;
import com.jyw.business.ast.domain.vo.web.InsRecordAstPageVo;
import com.jyw.business.ast.domain.vo.web.InsTaskAstPageVo;
import com.jyw.business.ins.domain.InsPlan;
import com.jyw.business.ins.domain.InsTask;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jyw.business.ins.domain.dto.web.BaseInsTaskEditDto;
import com.jyw.business.ins.domain.dto.web.RecordUnitPageDto;
import com.jyw.business.ins.domain.dto.web.TaskUnitPageDto;
import com.jyw.business.ins.domain.dto.wechat.WechatRecordUnitPageDto;
import com.jyw.business.ins.domain.dto.wechat.WechatTaskUnitPageDto;
import com.jyw.business.ins.domain.model.CreateTaskTimeRage;
import com.jyw.business.ins.domain.vo.web.*;
import com.jyw.system.domain.dto.BaseTimeDto;

/**
 * 巡检任务Service接口
 *
 * @author system
 * @date 2023-10-07
 */
public interface IInsTaskService extends IService<InsTask> {

    /**
     * 查询巡检任务
     *
     * @param id 巡检任务主键
     * @return 巡检任务
     */
    InsTask selectInsTaskById(Long id);

    /**
     * 查询巡检任务详情
     *
     * @param id
     * @return
     */
    InsTaskInfoVO getInfoById(Long id);

    /**
     * 修改巡检任务（去巡检）
     *
     * @param insTaskEditDto
     */
    void editInsTask(BaseInsTaskEditDto insTaskEditDto);


    /**
     * 巡检记录-资产查询
     *
     * @param dto
     * @return
     */
    List<InsRecordAstPageVo> recordAstList(InsRecordAstPageDto dto);

    /**
     * 巡检记录-资产查询-小程序
     *
     * @param dto
     * @return
     */
    List<InsRecordAstPageVo> wxRecordAstList(WechatInsRecordAstPageDto dto);

    /**
     * 巡检记录-单元查询
     *
     * @param dto
     * @return
     */
    List<RecordUnitPageVo> recordUnitList(RecordUnitPageDto dto);

    /**
     * 巡检记录详情查询
     *
     * @param id
     * @return
     */
    RecordDetailVo detail(Long id);

    /**
     * 小程序-巡检记录-单元查询
     *
     * @param dto
     * @return
     */
    List<RecordUnitPageVo> wxRecordUnitList(WechatRecordUnitPageDto dto);

    /**
     * 巡检任务-资产查询
     *
     * @param dto
     * @return
     */
    List<InsTaskAstPageVo> taskAstList(InsTaskAstPageDto dto);

    /**
     * 巡检任务-单元查询
     *
     * @param dto
     * @return
     */
    List<TaskUnitPageVo> taskUnitList(TaskUnitPageDto dto);

    /**
     * 小程序-巡检任务-资产查询
     *
     * @param dto
     * @return
     */
    List<InsTaskAstPageVo> wxTaskAstList(WechatInsTaskAstPageDto dto);

    /**
     * 小程序-巡检任务-单元查询
     *
     * @param dto
     * @return
     */
    List<TaskUnitPageVo> wxTaskUnitList(WechatTaskUnitPageDto dto);

    /**
     * 首页-我的巡检
     *
     * @param baseTimeDto
     * @return
     */
    List<HomeMineTaskVO> mineTask(BaseTimeDto baseTimeDto);

    /**
     * 首页-我的整改
     *
     * @param baseTimeDto
     * @return
     */
    List<HomeMineRectifyVO> mineRectify(BaseTimeDto baseTimeDto);

    /**
     * 首页 待办
     *
     * @return
     */
    HomeInsToDoVO todo();

    /**
     * 创建定时任务
     *
     * @param insPlan
     * @param planItems
     * @param timeRages
     */
    void createInsTask(InsPlan insPlan, List<InsPlanItemVO> planItems, List<CreateTaskTimeRage> timeRages);

    /**
     * 删除今天已经生成的任务 重新生成（避免规则改变任务时间不一致）
     *
     * @param planId
     * @param currentTime
     */
    void deleteCreateTask(Long planId, LocalDateTime currentTime);
}
